import html2Canvas from 'html2canvas';
import jsPDF from 'jspdf';
import "/public/static/simfang-normal"
const htmlToPdf = {
    getPdf: async function (title, loading, signHeight1) {
        // loading = true;
        console.log(loading);

        // Capture the sign element
        const signElement = document.querySelector('#sign');
        const signCanvas = await html2Canvas(signElement, {
            allowTaint: false,
            taintTest: false,
            logging: false,
            useCORS: true,
            dpi: window.devicePixelRatio * 8,
            scale: 8,
        });
        const signDataUrl = signCanvas.toDataURL('image/png', 1.0);

        // const noNeedPrint = document.querySelector(".noNeedPrint");
        const noNeedPrint = document.getElementsByClassName("noNeedPrint");
        if (noNeedPrint.length>0){
            for (let noNeedPrintElement of noNeedPrint) {
                noNeedPrintElement.style.display="none"
            }
        }
        // Temporarily hide the sign element
        signElement.style.display = 'none';
        html2Canvas(document.querySelector('#pdfDom'), {
            allowTaint: false,
            taintTest: false,
            logging: false,
            useCORS: true,
            dpi: window.devicePixelRatio * 4, // 将分辨率提高到特定的DPI 提高四倍
            scale: 4, // 按比例增加分辨率
        }).then((canvas) => {
            var pdf = new jsPDF('p', 'mm', 'a4'); // A4纸，纵向
            var ctx = canvas.getContext('2d'),
                a4w = 190,
                a4h = 272, // A4大小，210mm x 297mm，四边各保留10mm的边距，显示区域190x277
                signHeight = signHeight1 || 58, // Height for the sign image
                imgHeight = Math.floor((a4h - signHeight - 10) * canvas.width / a4w), // 按A4显示比例换算一页图像的像素高度
                renderedHeight = 0,
                pageNum = 1,
                totalPages = Math.ceil(canvas.height / imgHeight);

            while (renderedHeight < canvas.height) {
                var page = document.createElement('canvas');
                page.width = canvas.width;
                page.height = Math.min(imgHeight, canvas.height - renderedHeight); // 可能内容不足一页

                // 用getImageData剪裁指定区域，并画到前面创建的canvas对象中
                page
                    .getContext('2d')
                    .putImageData(
                        ctx.getImageData(
                            0,
                            renderedHeight,
                            canvas.width,
                            Math.min(imgHeight, canvas.height - renderedHeight),
                        ),
                        0,
                        0,
                    );

                pdf.addImage(
                    page.toDataURL('image/jpeg', 1.0),
                    'JPEG',
                    10,
                    10,
                    a4w,
                    (a4w * page.height) / page.width,
                ); // 添加图像到页面，保留10mm边距

                // 添加签名图片到每页底部
                pdf.addImage(
                    signDataUrl,
                    'PNG',
                    22,
                    pdf.internal.pageSize.getHeight() - signHeight - 20, // Position the sign image 20mm from the bottom
                    a4w - 22,
                    signHeight
                );

                // 添加页码
                pdf.setFontSize(13);
                pdf.setFont("simfang");
                pdf.text(`第${pageNum}页 共${totalPages}页`, pdf.internal.pageSize.getWidth() - signHeight, pdf.internal.pageSize.getHeight() - 10);

                renderedHeight += imgHeight;
                if (renderedHeight < canvas.height) {
                    pdf.addPage(); // 如果后面还有内容，添加一个空页
                    pageNum++; // 页码加1
                }
            }

            // 保存文件
            pdf.save(title + '.pdf');
            // loading = false;
            if (noNeedPrint.length>0){
                for (let noNeedPrintElement of noNeedPrint) {
                    noNeedPrintElement.style.display=""
                }
            }
        }).finally(() => {
            // Restore the sign element's display style
            signElement.style.display = 'block';
        });
    },
    async addPageNum(title, loading,signHeight1) {

        const noNeedPrint = document.getElementsByClassName("noNeedPrint");

        if (noNeedPrint.length>0){
            for (let noNeedPrintElement of noNeedPrint) {
                noNeedPrintElement.style.display="none"
            }
        }
        html2Canvas(document.querySelector('#pdfDom'), {
            allowTaint: false,
            taintTest: false,
            logging: false,
            useCORS: true,
            dpi: window.devicePixelRatio * 4, // 将分辨率提高到特定的DPI 提高四倍
            scale: 4, // 按比例增加分辨率
        }).then((canvas) => {
            var pdf = new jsPDF('p', 'mm', 'a4'); // A4纸，纵向
            var ctx = canvas.getContext('2d'),
                a4w = 190,
                a4h = 272, // A4大小，210mm x 297mm，四边各保留10mm的边距，显示区域190x277
                imgHeight = Math.floor((a4h - 10) * canvas.width / a4w), // 按A4显示比例换算一页图像的像素高度
                renderedHeight = 0,
                pageNum = 1,
                totalPages = Math.ceil(canvas.height / imgHeight);

            while (renderedHeight < canvas.height) {
                var page = document.createElement('canvas');
                page.width = canvas.width;
                page.height = Math.min(imgHeight, canvas.height - renderedHeight); // 可能内容不足一页

                // 用getImageData剪裁指定区域，并画到前面创建的canvas对象中
                page
                    .getContext('2d')
                    .putImageData(
                        ctx.getImageData(
                            0,
                            renderedHeight,
                            canvas.width,
                            Math.min(imgHeight, canvas.height - renderedHeight),
                        ),
                        0,
                        0,
                    );

                pdf.addImage(
                    page.toDataURL('image/jpeg', 1.0),
                    'JPEG',
                    10,
                    10,
                    a4w,
                    (a4w * page.height) / page.width,
                ); // 添加图像到页面，保留10mm边距
                // 添加页码
                pdf.setFontSize(13);
                pdf.setFont("simfang");
                pdf.text(`第${pageNum}页 共${totalPages}页`, pdf.internal.pageSize.getWidth()-30, pdf.internal.pageSize.getHeight() - 10);

                renderedHeight += imgHeight;
                if (renderedHeight < canvas.height) {
                    pdf.addPage(); // 如果后面还有内容，添加一个空页
                    pageNum++; // 页码加1
                }
            }

            // 保存文件
            pdf.save(title + '.pdf');
            if (noNeedPrint.length>0){
                for (let noNeedPrintElement of noNeedPrint) {
                    noNeedPrintElement.style.display=""
                }
            }
        })
    },
};

export default htmlToPdf;
